package com.chenwc.util;

import com.chenwc.httpclient.RestMock;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;

/**
 * @author chenwc
 * @date 2023/9/1 16:08
 */
public class Utils {

    private final static Logger log = LoggerFactory.getLogger(Utils.class);

    private static final DecimalFormat format = new DecimalFormat("#.00");

    /**
     * 读取流里的二进制数据
     *
     * @param inputStream 输入流
     * @return 二进制数据
     * @throws IOException 异常信息
     */
    public static byte[] readInputStream(InputStream inputStream) throws IOException {
        byte[] buffer = new byte[1024];
        int len = 0;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        while ((len = inputStream.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
        }
        bos.close();
        return bos.toByteArray();
    }

    /**
     * 判断文件的父级目录是否存在，不存在则创建
     *
     * @param file 文件
     * @return true 父级目录存在或创建父级目录成功， false创建父级目录失败
     */
    public static boolean mkdirParents(File file) {
        if (!file.getParentFile().exists()) {
            return file.getParentFile().mkdirs();
        } else {
            return true;
        }
    }

    /**
     * 打印对象大小
     *
     * @param myValueSize 对象大小
     */
    public static void printObjectSize(Long myValueSize) {
        if (myValueSize < 1024) {
            log.info("文件大小为：" + myValueSize + " B");
        } else if (calKb(myValueSize) < 1024) {
            log.info("文件大小为：" + format.format(calKb(myValueSize)) + " KB");
        } else if (calKb(calKb(myValueSize)) < 1024) {
            log.info("文件大小为：" + format.format(calKb(calKb(myValueSize))) + " MB");
        } else {
            log.info("文件大小为：" + format.format(calKb(calKb(calKb(myValueSize)))) + " GB");
        }
    }

    /**
     * bytes 转成 kb
     *
     * @param val bytes
     * @return kb
     */
    private static double calKb(double val) {
        return val / 1024.00;
    }

}
